'use strict';

const fs = require('fs');


// 找出所有的控制文件，过滤掉不是js结尾的，并且不能index.js
function findController() {
    // 直接指定在哪个路径下，不再提供指定路径的功能
    let path = './controllers';

    // 极少数情况下满足如下条件，可以使用同步：1、应用启动的时候 2、这段只会被使用一次，并不会每次请求都调用
    let files = fs.readdirSync(path);// 找到的结果形式如下：['blogs.js','index.js']

    // 对得到的数组进行一些过滤处理，以返回我们预期的结果
    let res = files.filter(item => {
        return item.endsWith('.js') && item !== 'index.js';
    });
    return res;
}

// 注册所有的路由
function registryController(files, router) {
    // 遍历所有的files
    files.forEach(file => {
        // 将file代表的文件当成模块引入
        let tmp = require(`../controllers/${file}`);
        // 这个tmp形如下面这个结构
        /* {
                'get /blogs': getAll,
                'get /blogs/:id': getById,
                'post /blogs': addItem,
                'put /blogs/:id': updateItem,
                'del /blogs/:id': delItem,
            }
        */

        // 遍历获得的控制器对象
        for (let key in tmp) {
            // key是一个字符串，其形式为：'get /blogs'
            let arr = key.split(' ');

            let method = arr[0];// 'get'
            let url = arr[1];// '/blogs'
            let fn = tmp[key];// 是一个函数

            if (method === 'get') {
                router.get(url, fn);
            } else if (method === 'post') {
                router.post(url, fn);
            } else if (method === 'put') {
                router.put(url, fn);
            } else if (method === 'del') {
                router.delete(url, fn);
            }
        }
    })
}


module.exports = {
    findController, registryController
}